/*
 * @lc app=leetcode.cn id=73 lang=java
 *
 * [73] 矩阵置零
 */

// @lc code=start
class Solution {
    public void setZeroes(int[][] matrix) {

        // 暴力法
        // int m = matrix.length;  // 行数
        // int n = matrix[0].length;  // 列数

        // for(int i = 0; i < m; i++) {
        //     for(int j = 0; j < n; j++) {
        //         if(matrix[i][j] == 0) {

        //             for(int k = 0; k < m; k++) {
        //                 if(matrix[k][j] != 0) matrix[k][j] = -10000000;
        //             }

        //             for(int k = 0; k < n; k++) {
        //                 if(matrix[i][k] != 0) matrix[i][k] = -10000000;
        //             }
        //         }
        //     }
        // }

        // for(int i = 0; i < m; i++) {
        //     for(int j = 0; j < n; j++) {
        //         if(matrix[i][j] == -10000000) matrix[i][j] = 0;
        //     }
        // }

        // 用第一行和第一列来标记
        // 1. 先判断第一行和第一列是否有0
        // 2. 用第一行和第一列来标记其他行列是否有0
        // 3. 根据第一行和第一列的标记来修改其他行列
        // 4. 修改第一行和第一列
        int row = 1;
        int col = 1;
        // 记录原本第0行和第0列是否有0
        for(int i = 0;i < matrix[0].length;i++)
            if(matrix[0][i] == 0){
                row = 0;
                break;
            }
        for(int i = 0;i < matrix.length;i++){
            if(matrix[i][0] == 0){
                col = 0;
                break;
            }
        }
        // 标记哪些行和列要刷成0
        for(int i = 0;i < matrix.length;i++){
            for(int j = 0;j < matrix[0].length;j++){
                if(matrix[i][j] == 0){
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }
        // 将标记好的行和列刷为0
        // 看行
        for(int i = 1;i < matrix.length;i++){
            if(matrix[i][0] == 0){
                for(int j = 0 ;j < matrix[0].length;j++) matrix[i][j] = 0;
            }
        }
        // 看列
        for(int i = 1;i < matrix[0].length;i++){
            if(matrix[0][i] == 0){
                for(int j = 0;j < matrix.length;j++) matrix[j][i] = 0;
            }
        }
        // 最后刷第0行和第0列
        if(row == 0)
            for(int i = 0;i < matrix[0].length;i++)
                matrix[0][i] = 0;
        
        if(col == 0)
            for(int i = 0;i < matrix.length;i++)
                matrix[i][0] = 0;

    }
}
// @lc code=end

